﻿//webpack  直接用这个命令行执行
//webpack -w  自动发现文件变化执行

var webpack = require('webpack');
var path = require('path');
// 配置目录

const CURRENT_PATH = path.resolve(__dirname); // 获取到当前目录
//// 因为我们的webpack.config.js文件不在项目根目录下，所以需要一个路径的配置
//const ROOT_PATH = path.join(__dirname, '../'); // 项目根目录
const ROOT_PATH = path.resolve(__dirname);
const MODULES_PATH = path.join(ROOT_PATH, './node_modules'); // node包目录
const BUILD_PATH = path.join(ROOT_PATH, './public/assets'); // 最后输出放置公共资源的目录
//用于抽取公共资源
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');
module.exports = {
    //context: ROOT_PATH, // 设置webpack配置中指向的默认目录为项目根目
    devtool: 'source-map',
    //页面入口文件配置 要被处理的文件
    entry: {
        //key可以是路径如 'view/main/index': './js/view/main/index.js'
        //webpackTest: './pack/js/webpackTest.js',
        // reacttest: './pack/test/reacttest.jsx',
        //exceltest: './pack/test/exceltest.jsx',
        // TCPtest: './pack/test/TCPtest.jsx',
        //UDPtest: './pack/test/UDPtest.jsx'
        // index: './src/js/page/index.js',
        //支持数组形式，将加载数组中的所有模块
        //page2: ["./entry1", "./entry2"]

        "testes6": './ES6/tt.js',
        "main": './TSX/main.tsx',
        "waiting": './TSX/waiting.tsx'
        //"hello": './TSX/hello.tsx'
    },
    //入口文件输出配置 即入口文件最终要生成什么名字的文件、存放到哪里
    output: {
        filename: "[name].js", // 这里会自动生成index.js
        publicPath: "/JS/" // 我们这就生成到根目录
    },
    //extensions: [".js", ".tsx"],
    resolve: {
        // modules: [
        //     "node_modules",
        //     path.resolve(__dirname, "./TSX"),
        //     // path.resolve(__dirname, "./JS")
        // ],
        ////模块别名定义，方便后续直接引用别名，无须多写长长的地址
        //alias: {
        //    AppStore: 'js/stores/AppStores.js',
        //    ActionType: 'js/actions/ActionType.js',
        //    AppAction: 'js/actions/AppAction.js'
        //},
        //aliasFields: ["browser"],
        // enforceModuleExtension: true,
        extensions: ['.js', '.json', '.ts', '.tsx', 'jsx']
        //extensions: '.js,.ts,.tsx'
        //,aliasFields: [`browser`]
    },
    //extensions: [".js", ".tsx"],
    module: {
        //加载器配置 告知 webpack 每一种文件都需要使用什么加载器来处理。 所有加载器需要使用npm来加载
        //loaders  rules
        loaders: [
            { test: /\.css$/, loader: 'style-loader!css-loader' },
            //CommonJS 解析器
            { test: /\.jsx$/, loaders: ['jsx-loader?harmony'] },
            //{
            //    test: /\.jsx?$/,
            //    exclude: /(node_modules|bower_components)/,
            //    loader: ['babel-loader'],

            //    query: {
            //        // presets: ['es2015']
            //        // 如果安装了React的话
            //        presets: ['react', 'es2015']
            //    }
            //},
            //匹配到scss后缀名的就先用sass，再用css，最后用style处理，不同的处理器通过!分隔并串联起来。
            { test: /\.scss$/, loader: 'style!css!sass?sourceMap' },
            //图片文件使用 url-loader 来处理，小于8kb的直接转为base64
            { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192' },
            {
                test: /\.jade$/,
                loader: 'jade'
            },
            {
                test: /\.(ts|tsx)?$/,
                //loader: 'ts-loader' 
                loader: 'awesome-typescript-loader'

            }

            // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
            //,{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
            //ECMAScript  解析器
            , {
                test: /\.js$/,
                // exclude: MODULES_PATH,
                // query: {
                //     //若在package.json中定义了这个presets，则这边可以删掉
                //     presets: ['latest']
                // },
                loader: 'babel-loader'
            }
        ]
    },
    //不处理应用的某些依赖库
    externals: {
        "react": "React",
        "react-dom": "ReactDOM"
    },
    // 插件项
    plugins: [
        //最小化所有JavaScript块的输出  明显使输出的js文件变小  
        // new webpack.optimize.UglifyJsPlugin({
        //     compress: {
        //         warnings: false,
        //     },
        //     sourceMap: true, //这里的soucemap 不能少，可以在线上生成soucemap文件，便于调试
        //     mangle: true,
        //     output: {
        //         comments: true, //注释是否输出
        //     },
        // }),
        new webpack.DefinePlugin({
            "process.env": {
                NODE_ENV: JSON.stringify("production")
            }
        }),
        //new webpack.optimize.CommonsChunkPlugin({
        //    // 与 entry 中的  对应
        //    name: 'Commons',
        //    // 输出的公共资源名称
        //    filename: 'Commons.js',
        //    // 对所有entry实行这个规则
        //    minChunks: Infinity
        //}),
    ]
};